cssnode: Add gtk_css_node_invalidate_style_provider()
authorBenjamin Otte <otte@redhat.com>
Tue, 17 Feb 2015 15:11:38 +0000 (16:11 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 Mar 2015 14:23:32 +0000 (15:23 +0100)
This function not just invalidates the current node, but also all
children.

gtk/gtkcssnode.c
gtk/gtkcssnodeprivate.h
gtk/gtkstylecontext.c

index d81f061a9ebd6b21f88fd2fdd0b05d7c171a8583..3a317cd831918a8e2bcb0c3fdb4654d57cb053c5 100644 (file)
@@ -438,6 +438,9 @@ gtk_css_node_reposition (GtkCssNode *node,
         {
           gtk_css_node_parent_was_unset (node);
         }
+
+      if (gtk_css_node_get_style_provider_or_null (node) == NULL)
+        gtk_css_node_invalidate_style_provider (node);
     }
 
   if (parent)
@@ -736,6 +739,22 @@ gtk_css_node_get_declaration (GtkCssNode *cssnode)
   return cssnode->decl;
 }
 
+void
+gtk_css_node_invalidate_style_provider (GtkCssNode *cssnode)
+{
+  GtkCssNode *child;
+
+  gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_SOURCE);
+
+  for (child = cssnode->first_child;
+       child;
+       child = child->next_sibling)
+    {
+      if (gtk_css_node_get_style_provider_or_null (child) == NULL)
+        gtk_css_node_invalidate_style_provider (child);
+    }
+}
+
 void
 gtk_css_node_invalidate (GtkCssNode   *cssnode,
                          GtkCssChange  change)
index 8cfcd2a9c0504f83f9e2702d61b772036e878faa..7403cd345fe4081cfb96d55d08b779b26625bb25 100644 (file)
@@ -139,6 +139,8 @@ void                    gtk_css_node_set_style          (GtkCssNode            *
                                                          GtkCssStyle           *style);
 GtkCssStyle *           gtk_css_node_create_style       (GtkCssNode            *cssnode);
 
+void                    gtk_css_node_invalidate_style_provider
+                                                        (GtkCssNode            *cssnode);
 void                    gtk_css_node_invalidate         (GtkCssNode            *cssnode,
                                                          GtkCssChange           change);
 void                    gtk_css_node_validate           (GtkCssNode            *cssnode,
index 2b9f490f6fc0f982a97302f60d8a4e5eec42cc2b..33e56ee58b40516cec420dd18a47159a72aec7e9 100644 (file)
@@ -289,7 +289,7 @@ static void
 gtk_style_context_cascade_changed (GtkStyleCascade *cascade,
                                    GtkStyleContext *context)
 {
-  gtk_css_node_invalidate (gtk_style_context_get_root (context), GTK_CSS_CHANGE_SOURCE);
+  gtk_css_node_invalidate_style_provider (gtk_style_context_get_root (context));
 }
 
 static void